﻿using System;
using System.Collections.Generic;
using TPDiseño.Clases_de_Entidad;
using DAO.DataSetConsultoraTableAdapters;

namespace DAO
{
    public class DAOConsultor : DAO
    {
        //Atributos de manejo de instancia (singleton)
        static DAOConsultor instance = null; 
        // Atributos para acceso a los DataSet Tipados
        private DataSetConsultora.ConsultoresDataTable ConsultoresTabla = new DataSetConsultora.ConsultoresDataTable();
        private ConsultoresTableAdapter ConsultoresTableAdapter = new ConsultoresTableAdapter();

        public static DAOConsultor Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (padlock)
                    {
                        if (instance == null)
                        {
                            instance = new DAOConsultor();
                        }
                    }
                }
                return instance;
            }
        }
        
        public List<Consultor> cargar()
        {

            // Cargo los Consultor de la db
            ConsultoresTabla = ConsultoresTableAdapter.GetData();

            // Finalmente devuelvo la lista de ConsultorsCargados, recolectadas por la funcion            
            return recolectar();
        }

        public Consultor logIn(Consultor unConsultor){

            // Cargo los Consultor de la db
            ConsultoresTabla = ConsultoresTableAdapter.consultarPorUserPass(unConsultor._usuario, unConsultor._contraseña);

            // Finalmente devuelvo la lista de ConsultorsCargados, recolectadas por la funcion            
            return recolectarUno();
        }

        public Consultor logIn(string user, string pass){

            // Cargo los Consultor de la db
            ConsultoresTabla = ConsultoresTableAdapter.consultarPorUserPass(user, pass);

            // Finalmente devuelvo la lista de ConsultorsCargados, recolectadas por la funcion            
            return recolectarUno();
        }


        private List<Consultor> recolectar(){

            // Creo la lista para recolectar y devolver los Consultors cargadas de la db
            List<Consultor> ConsultorsCargados = new List<Consultor>();

            // Recorro los Consultors de la tabla
            foreach (DataSetConsultora.ConsultoresRow unaConsultorFila in ConsultoresTabla)
            {

                // Creo un Consultor y lo agrego a la lista de Consultors cargados
                ConsultorsCargados.Add(new Consultor(unaConsultorFila.id,
                                                     unaConsultorFila.tipo,
                                                     unaConsultorFila.nro_documento,
                                                     unaConsultorFila.nombre,
                                                     unaConsultorFila.apellido,
                                                     unaConsultorFila.email,
                                                     unaConsultorFila.genero.ToString(),
                                                     unaConsultorFila.fecha_nacimiento,
                                                     unaConsultorFila.escolariodad,
                                                     unaConsultorFila.nacionalidad,
                                                     unaConsultorFila.nro_empleado,
                                                     unaConsultorFila.usuario,
                                                     unaConsultorFila.contraseña)
                                                     );


            }

            return ConsultorsCargados;
        }

        public Consultor recolectarUno()
        {

            // Finalmente retorno un nuevo objeto Consultor mapeado de la tabla
            return new Consultor(ConsultoresTabla[0].id,
                                 ConsultoresTabla[0].tipo,
                                 ConsultoresTabla[0].nro_documento,
                                 ConsultoresTabla[0].nombre,
                                 ConsultoresTabla[0].apellido,
                                 ConsultoresTabla[0].email,
                                 ConsultoresTabla[0].genero.ToString(),
                                 ConsultoresTabla[0].fecha_nacimiento,
                                 ConsultoresTabla[0].escolariodad,
                                 ConsultoresTabla[0].nacionalidad,
                                 ConsultoresTabla[0].nro_empleado,
                                 ConsultoresTabla[0].usuario,
                                 ConsultoresTabla[0].contraseña);


        }
    }
}
    

